В настоящее время существует достаточно много способов описания функциональности моделей аппаратного обеспечения вычислительных систем. Наиболее распространённые - языки описания аппаратного обеспечения (VHDL, Verilog, AHDL и др.).
Альтернативные варианты отличаются способом описания (зачастую более высокоуровневым) и позволяют получить существенный выигрыш в скорости разработки моделей для симуляции. Однако возникает проблема в дальнейших преобразованиях описаний высокоуровневых моделей в синтезируемые HDL-описания. Одним из наиболее эффективных решений данной проблемы является автоматическая генерация синтезируемых HDL-описаний.
В разработанной нами (NewIT Research Labs) системе высокоуровневого проектирования аппаратного обеспечения HLCCAD обеспечивается интеграция моделей высокоуровневых описаний с системой проектирования, моделирования и анализа. Модель устройства реализовывается на языке программирования высокого уровня (таких как Object Pascal, C++ и др.) и позволяет создавать специализированные средства создания и модификации описания, оптимизированные средства моделирования описания, специализированные средства анализа и средства генерации описания в виде схем в терминах системы HLCCAD или VHDL описания.
Таким образом, интерактивный интерфейс с пользователем может обеспечить описание устройства в терминах прикладной области. А программный интерфейс с системой HLCCAD - автоматизированную генерацию VHDL-описания или HLCCAD-схемы. Поскольку HLCCAD обеспечивает эффективную отладку схем, визуализацию и интеллектуальный анализ результатов симуляции и автоматическую генерацию VHDL-описаний по схемам, то нам представляется более продуктивным генерировать именно схемы, и HLCCAD обеспечивает соответствующий открытый интерфейс, который подробней описывается ниже. Используя этот интерфейс, программа пользователя (высокоуровневая модель) может "рисовать" иерархические схемы из стандартных компонент параметризованной библиотеки HLCCAD - соответствующие устройствам, интерактивно определенным пользователем.
Реализация высокоуровневых компонент базируется на COM интерфейсах. Все базовые объекты данных системы (Corpus, Contact, CorpusText, Scheme и др.) поддерживают интерфейсы для управления данными извне. Модель представляет собой DLL (Dynamic Link Library) с определёнными точками входа (процедурами). Любой корпус устройства в системе может быть связан с высокоуровневой моделью. Для каждого такого корпуса можно создать внешние параметры устройства, при вызове которых загружается динамическая библиотека и вызывается указанная функция. В качестве параметра передаётся указатель на интерфейс IExtParameter. С помощью этого интерфейса можно получить интерфейс корпуса:
Procedure GetCorpus(Var P : ICorpus); ICorpus является базовым интерфейсом при модификации устройства. С помощью функций этого интерфейса разработчик может получить и модифицировать параметры корпуса устройства. Function GetName : PChar; - получить имя устройства; Procedure SetName(S : PChar); - изменить имя устройства;
Аналогичным образом можно модифицировать все остальные параметры устройства.
Для изменения параметров, которые представляют собой список произвольной размерности, предусмотрены функции получения количества элементов в списке, получения интерфейса элемента по номеру, удаление элемента по номеру и создание нового. Например, для работы с контактами:
Аналогичным образом реализована работа с текстовыми сообщениями на корпусе и дополнительными параметрами устройства.
Для операций над схемой устройства предусмотрено две процедуры:
Интерфейсы контакт IContact, текста ICorpusText и параметров ICorpusParameter содержат функции для изменения параметров соответствующих элементов устройства.
Интерфейс схемы IScheme содержит процедуры и функции модификации файла тестовых воздействий, списка контактов, связей и корпусов. Дополнительно в интерфейсе предусмотрена процедура для добавления корпусов из "Инспектора проектов":
Procedure AddCorpus(ProjectName,Name : PChar; Var P : ICorpus);stdcall;
В качестве ParamName указывается имя файла проекта (достаточно только имени файла), а Name - имя устройства. Допускается указывать имя с именами подпапок разделённых символом "\" (например, "Папка1\Папка2\Устройство1").
Таким образом, используя данный подход, разработчик высокоуровневых моделей устройств может реализовать программный генератор для создания схемы устройства. В состав схемы могут входить как устройства, имеющие VHDL-описание, так и устройства, которые требуют дальнейшей детализации.
Необходимо отметить, что данный подход успешно использован нами при создании средств автоматического синтеза микропрограммных автоматов. В качестве высокоуровневого описания используется алгоритм функционирования, записанный в виде программы на разработанном нами ассемблере микропрограммных автоматов (по семантике и синтаксису довольно близок к ассемблеру Intel 8086). В IDE Winter/IEESD/HLCCAD обеспечивается эффективная отладка заданной микропрограммы. А затем по отлаженной микропрограмме генерируется HLCCAD-схема, описывающая микропрограммный автомат, реализующий заданный алгоритм, и включающий операционный автомат, содержащий только те операционные устройства, которые реально требуются для исполнения заданного алгоритма и управляющий автомат, обеспечивающий корректное исполнение заданного микропрограммой алгоритма. HLCCAD автоматически генерирует синтезируемое VHDL-описание. соответствующее полученной по микропрограмме схеме.